package estore.view;

import estore.model.Product;
import estore.service.ProductService;
import estore.service.ProductSorters;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.InputMismatchException;

public class ConsoleShop {

    private final ProductService productService = new ProductService();
    private final Map<String, Integer> shoppingCart = new HashMap<>();
    private final Scanner scanner = new Scanner(System.in);

    public void start() {
        while (true) {
            showMenu();
            int choice;
            try {
                choice = scanner.nextInt();
                scanner.nextLine(); // 消费换行符
            } catch (InputMismatchException e) {
                System.out.println("输入错误！请输入数字选项。");
                scanner.nextLine();
                continue;
            }

            switch (choice) {
                case 1:
                    browseProducts(null); // 默认自然排序（按ID升序）
                    break;
                case 2:
                    addToCart();
                    break;
                case 3:
                    viewCart();
                    break;
                case 4:
                    showSortedProducts(); // 自定义排序菜单
                    break;
                case 5:
                    System.out.println("感谢使用，再见！");
                    return;
                default:
                    System.out.println("无效的选项，请重新输入！");
            }
        }
    }

    // 显示主菜单（新增“自定义排序浏览商品”选项）
    private void showMenu() {
        System.out.println("\n----- 欢迎来到商城 -----");
        System.out.println("1. 浏览所有商品（默认排序）");
        System.out.println("2. 添加商品到购物车");
        System.out.println("3. 查看购物车");
        System.out.println("4. 自定义排序浏览商品");
        System.out.println("5. 退出");
        System.out.print("请输入您的选择: ");
    }

    // 浏览商品（支持传入Comparator进行排序）
    private void browseProducts(Comparator<Product> comparator) {
        System.out.println("\n--- 商品列表 ---");
        List<Product> products = productService.getAllProducts();
        if (products.isEmpty()) {
            System.out.println("商店里还没有商品。");
            return;
        }

        if (comparator != null) {
            products.sort(comparator); // 使用自定义Comparator排序
        } else {
            Collections.sort(products); // 使用自然排序（Product的compareTo方法）
        }

        products.forEach(System.out::println);
    }

    // 自定义排序子菜单
    private void showSortedProducts() {
        System.out.println("\n--- 排序方式选择 ---");
        System.out.println("1. 按价格从低到高");
        System.out.println("2. 按价格从高到低");
        System.out.println("3. 按库存从多到少");
        System.out.println("4. 返回主菜单");
        System.out.print("请选择排序方式: ");

        int choice;
        try {
            choice = scanner.nextInt();
            scanner.nextLine();
        } catch (InputMismatchException e) {
            System.out.println("输入错误！请输入数字选项。");
            scanner.nextLine();
            return;
        }

        Comparator<Product> comparator = null;
        switch (choice) {
            case 1:
                comparator = ProductSorters.BY_PRICE_ASC;
                break;
            case 2:
                comparator = ProductSorters.BY_PRICE_DESC;
                break;
            case 3:
                comparator = ProductSorters.BY_STOCK_DESC;
                break;
            case 4:
                return;
            default:
                System.out.println("无效的选项，将使用默认排序。");
        }

        browseProducts(comparator);
    }

    // addToCart、viewCart方法保持不变（已包含异常处理和购物车有效性校验）
    private void addToCart() { /* 略... */ }
    private void viewCart() { /* 略... */ }

    public static void main(String[] args) {
        new ConsoleShop().start();
    }
}